package Solution.problem066;

/**
 * @program Leetcode
 * @description:  简单题，就是数字加一，注意进位就行了，首位进位
 * 用递归性能会好一点儿
 * @author: lishangsheng
 * @create: 2019/06/09 13:23
 */
public class Solution {
    private static int[] plusOne(int[] digits) {

        /** 边界控制*/
        if(digits.length==0){
            return null;
        }
        int[] result=new int[digits.length+1];
        /** 最为标志计算最后结果用*/
        result[0]=-1;
        int index=digits.length-1;
        int carry=1;
        addOne(result,digits,index,carry);

        if(result[0]>0){
            return result;
        }
        int[] result2=new int[digits.length];
        for(int i=0;i<digits.length;i++){
            result2[i]=result[i+1];
        }
        return result2;

    }

    private static void addOne(int[] result,int[] digits,int index,int carry) {
        if (index >= 0) {
            int num = digits[index] + carry;
            if (num >= 10) {
                carry = 1;
            } else {
                carry = 0;
            }
            result[index+1] = num % 10;

            addOne(result,digits,--index,carry);
        }else {
            if(carry>0){
                result[index+1]=carry;
            }
        }

    }

    public static void main(String[] args){
/*        int[] nums1=new int[]{};
        System.out.println(plusOne(nums1));*/
/*        int[] nums2=new int[]{1,2,3};
        int[] result2=plusOne(nums2);
        System.out.println(result2);*/
        int[] nums3=new int[]{9,9,9,9};
        int[] result3=plusOne(nums3);
        System.out.println(result3);
    }
}
